package br.com.financas.daos;

import br.com.financas.beans.Conta;
import br.com.financas.beans.Pessoa;
import br.com.financas.beans.TipoConta;
import br.com.financas.util.HibernateUtil;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

/**
 *
 * @author Denis
 */
public class ContaDao {
    Session sessao;
    Transaction trans;
    List<Conta>list;
    TipoConta tipo = new TipoConta();
    
    public void addConta(Conta c,TipoConta t, Pessoa p){
        try {
            sessao = HibernateUtil.getSessionFactory().openSession();
            trans=sessao.beginTransaction();

            Conta conta = new Conta();
            TipoConta tipo = new TipoConta();
            Pessoa pessoa = new Pessoa();

            tipo.setIdTipoConta(t.getIdTipoConta());
            pessoa.setIdPessoa(p.getIdPessoa());
       
            conta.setNome(c.getNome());
            conta.setSaldo(c.getSaldo());
            conta.setIdTipoConta(tipo);
            conta.setIdPessoa(pessoa);

            sessao.save(conta);
            trans.commit();
            
        } catch (Exception e){
             e.printStackTrace();
        }finally{
             sessao.close();
        }
    }
    public void updateConta(Conta c, TipoConta t){
       try {
            sessao = HibernateUtil.getSessionFactory().openSession();
            trans=sessao.beginTransaction();
            
            c.setIdTipoConta(t);            
            
            sessao.update(c);
            trans.commit();
            
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            sessao.close();
        }
    }
    
    public void updateSaldoConta(Conta c,Pessoa p,TipoConta t){
       try {
            sessao = HibernateUtil.getSessionFactory().openSession();
            trans=sessao.beginTransaction();
            
            c.setIdTipoConta(t);
            c.setIdPessoa(p);
            
            sessao.update(c);
            trans.commit();
            
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            sessao.close();
        }
    }
    public void deletarConta(Conta c){
        try {
            sessao = HibernateUtil.getSessionFactory().openSession();
            trans=sessao.beginTransaction();
            sessao.delete(c);
            trans.commit();
            
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            sessao.close();
        }
    }
    public List<Conta> listar(Pessoa pessoa){
        sessao = HibernateUtil.getSessionFactory().openSession();
        trans=sessao.beginTransaction();
        Criteria cri = sessao.createCriteria(Conta.class);
        cri.createCriteria("idPessoa").add(Restrictions.eq("id",pessoa.getIdPessoa()));
        this.list = cri.list();
        sessao.close();
        return list;
    }
    
    public List<Conta> buscarSaldo(Pessoa pessoa,Conta conta){
        sessao = HibernateUtil.getSessionFactory().openSession();
        trans=sessao.beginTransaction();
        Criteria cri = sessao.createCriteria(Conta.class);
        cri.createCriteria("idPessoa").add(Restrictions.eq("id",pessoa.getIdPessoa()));
        cri.add(Restrictions.eq("id",conta.getIdConta()));
        this.list = cri.list();
        sessao.close();
        return list;
    }
    
    public List<Conta> listarCombo(Pessoa pessoa){
        sessao = HibernateUtil.getSessionFactory().openSession();
        trans=sessao.beginTransaction();
        Criteria cri = sessao.createCriteria(Conta.class);
        cri.createCriteria("idPessoa").add(Restrictions.eq("id",pessoa.getIdPessoa()));
        this.list = cri.list();
        sessao.close();
        return list;
    }
}